<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
	xmlns="http://www.w3.org/2000/svg"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:flo="http://florence.sourceforge.net"
	xmlns:svg="http://www.w3.org/2000/svg"
	xmlns:xlink="http://www.w3.org/1999/xlink">

	<xsl:include href="tools.xsl"/>

	<xsl:output version='1.0' method="xml" encoding='UTF-8'/>
	<xsl:template match="/">
		<xsl:text disable-output-escaping="yes">&lt;!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"&gt;
			&lt;?xml-stylesheet type="text/css" href="./florence.css"?&gt;</xsl:text>
		<svg xmlns="http://www.w3.org/2000/svg">
			<title>Florence's keyboard</title>
			<desc>Keyboard generated by florence: http://florence.sourceforge.net</desc>
			<xsl:apply-templates/>
		</svg>
	</xsl:template>

	<xsl:template match="flo:informations">
	</xsl:template>

	<xsl:template name="keymap_symbol">
		<xsl:variable name="code"><xsl:value-of select="flo:code"/></xsl:variable>
		<xsl:choose>
			<xsl:when test="document('keymap.xml')/keymap/keys/key[@code=$code]/symbol">
				<xsl:variable name="ref"><xsl:value-of select="document('keymap.xml')/keymap/keys/key[@code=$code]/symbol"/></xsl:variable>
				<use width="40" height="40">
					<xsl:call-template name="coords">
						<xsl:with-param name="size" select="20"/>
					</xsl:call-template>
					<xsl:attribute name="xlink:href">style.svg#<xsl:value-of select="$ref"/></xsl:attribute>
				</use>
			</xsl:when>
			<xsl:otherwise>
				<xsl:call-template name="text">
					<xsl:with-param name="text" select="document('keymap.xml')/keymap/keys/key[@code=$code]/text"/>
				</xsl:call-template>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>

	<xsl:template name="symbol">
		<xsl:choose>
			<xsl:when test="document('keymap.xml')">
				<xsl:choose>
					<xsl:when test="flo:code">
						<xsl:call-template name="keymap_symbol"/>
					</xsl:when>
					<xsl:when test="flo:action">
						<use width="40" height="40">
							<xsl:call-template name="coords">
								<xsl:with-param name="size" select="20"/>
							</xsl:call-template>
							<xsl:attribute name="xlink:href">style.svg#t_<xsl:value-of select="flo:action"/></xsl:attribute>
						</use>
					</xsl:when>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>
				<xsl:call-template name="text">
					<xsl:with-param name="text" select="flo:code"/>
				</xsl:call-template>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>

	<xsl:template name="key">
		<use transform="scale(20)" width="2" height="2" xlink:href="style.svg#s_default">
			<xsl:call-template name="coords"/>
			<xsl:if test="string(flo:shape)">
				<xsl:attribute name="xlink:href">style.svg#s_<xsl:value-of select="flo:shape"/></xsl:attribute>
			</xsl:if>
		</use>
		<xsl:if test="document('keymap.xml')">
			<xsl:variable name="actcode"><xsl:value-of select="flo:code"/></xsl:variable>
			<xsl:if test="document('keymap.xml')/keymap/key[@code=$actcode and @activated='yes']">
				<use transform="scale(20)" width="2" height="2" style="fill: red;" xlink:href="#s_default">
					<xsl:call-template name="coords"/>
					<xsl:if test="string(flo:shape)">
						<xsl:attribute name="xlink:href">style.svg#s_<xsl:value-of select="flo:shape"/></xsl:attribute>
					</xsl:if>
				</use>
			</xsl:if>
		</xsl:if>
		<xsl:text>
</xsl:text>
		<xsl:call-template name="symbol"/>
	</xsl:template>

	<xsl:template match="flo:keyboard">
		<svg>
			<xsl:attribute name="id">
				<xsl:choose>
					<xsl:when test="../flo:name"><xsl:value-of select="translate(../flo:name,' ','')"/></xsl:when>
					<xsl:otherwise>Main</xsl:otherwise>
				</xsl:choose>
			</xsl:attribute>
<!--			<xsl:attribute name="viewbox">0 0 <xsl:value-of select="flo:width"/>
				<xsl:text> </xsl:text>
				<xsl:value-of select="flo:height"/>
			</xsl:attribute>-->
			<xsl:attribute name="width"><xsl:value-of select="flo:width * 20"/></xsl:attribute>
			<xsl:attribute name="height"><xsl:value-of select="flo:height * 20"/></xsl:attribute>
			<xsl:choose>
				<xsl:when test="../flo:placement">
					<xsl:variable name="position" select="count(parent::*/preceding-sibling::flo:extension) + 1"/>
					<xsl:choose>
						<xsl:when test="../flo:placement='top'">
							<xsl:attribute name="x"><xsl:value-of select="sum(/flo:layout/flo:extension[flo:placement='left']/flo:keyboard/flo:width) * 20"/></xsl:attribute>
							<xsl:attribute name="y"><xsl:value-of select="sum(/flo:layout/flo:extension[flo:placement='top' and position() &lt; $position]/flo:keyboard/flo:width) * 20"/></xsl:attribute>
						</xsl:when>
						<xsl:when test="../flo:placement='left'">
							<xsl:attribute name="x"><xsl:value-of select="sum(/flo:layout/flo:extension[flo:placement='left' and position() &lt; $position]/flo:keyboard/flo:width) * 20"/></xsl:attribute>
							<xsl:attribute name="y"><xsl:value-of select="sum(/flo:layout/flo:extension[flo:placement='top']/flo:keyboard/flo:height) * 20"/></xsl:attribute>
						</xsl:when>
						<xsl:when test="../flo:placement='right'">
							<xsl:attribute name="x"><xsl:value-of select="( sum(/flo:layout/flo:extension[flo:placement='right' and position() &lt; $position]/flo:keyboard/flo:width) + sum(/flo:layout/flo:extension[flo:placement='left']/flo:keyboard/flo:width) + /flo:layout/flo:keyboard/flo:width ) * 20"/></xsl:attribute>
							<xsl:attribute name="y"><xsl:value-of select="sum(/flo:layout/flo:extension[flo:placement='top']/flo:keyboard/flo:height) * 20"/></xsl:attribute>
						</xsl:when>
					</xsl:choose>
				</xsl:when>
				<xsl:otherwise>
					<xsl:attribute name="x"><xsl:value-of select="sum(/flo:layout/flo:extension[flo:placement='left']/flo:keyboard/flo:width) * 20"/></xsl:attribute>
					<xsl:attribute name="y"><xsl:value-of select="sum(/flo:layout/flo:extension[flo:placement='top']/flo:keyboard/flo:height) * 20"/></xsl:attribute>
				</xsl:otherwise>
			</xsl:choose>
			<xsl:for-each select="flo:key">
				<xsl:call-template name="key"/>
			</xsl:for-each>
		</svg>
	</xsl:template>

	<xsl:template match="flo:extension">
		<xsl:apply-templates select="flo:keyboard"/>
	</xsl:template>

</xsl:stylesheet>

